//
//  CZPhotoBrowserCell.swift
//  GZWeibo666
//
//  Created by Apple on 15/12/7.
//  Copyright © 2015年 itcast. All rights reserved.
//

import UIKit

/// 自定义cell
class CZPhotoBrowserCell: UICollectionViewCell {
    
    /// 图片的url
    var url: NSURL? {
        didSet {
            guard let imageURL = url else {
                print("url没有值")
                return
            }
            
            // 清空图片
            imageView.image = nil
            
            // 显示菊花
            indicator.startAnimating()
            
//            // 下载图片
            imageView.sd_setImageWithURL(imageURL) { (image, error, _, _) -> Void in
                // 隐藏菊花
                self.indicator.stopAnimating()
                
                if error != nil {
                    print("下载图片出错")
                    return
                }
                
                print("下载图片完成: \(imageURL.absoluteString)")
//                self.imageView.sizeToFit()
                self.layoutImageView(image)
            }
        }
    }
    
    private func testAfterLoadImage(url: NSURL) {
        // 模拟网络延迟
        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (Int64)(1 * NSEC_PER_SEC)), dispatch_get_main_queue()) { () -> Void in
            // 下载图片
            self.imageView.sd_setImageWithURL(url) { (image, error, _, _) -> Void in
                // 隐藏菊花
                self.indicator.stopAnimating()
                
                if error != nil {
                    print("下载图片出错")
                    return
                }
                
                self.layoutImageView(image)
            }
        }
    }
    
    /*
        将图片等比缩放到宽度等于屏幕的宽度
            长图: 高度大于屏幕的高度
            短图: 高度小于屏幕的高度
    */
    private func layoutImageView(image: UIImage) {
        // 将图片等比缩放到宽度等于屏幕的宽度
        let size = self.displaySize(image)
        
        // 判断是长图还是短图
        // 长图:从左上角开始显示.可以滚动
        // 短图:高度方向居中显示
        if size.height < UIScreen.height() {
            // 短图:高度方向居中显示
            let offestY = (UIScreen.height() - size.height) * 0.5
            imageView.frame = CGRect(origin: CGPoint(x: 0, y: offestY), size: size)
        } else {
            imageView.frame = CGRect(origin: CGPointZero, size: size)
            
            // scrollView设置contentSize
            scrollView.contentSize = size
        }
    }
    
    /// 将图片等比缩放到宽度等于屏幕的宽度
    private func displaySize(image: UIImage) -> CGSize {
        // 新的高度 / 新的宽度 = 旧的高度 / 旧的宽度
        // 新的高度 = 新的宽度(屏幕的宽度) * 旧的高度 / 旧的宽度
        let newWidth = UIScreen.width()
        let newHeight = newWidth * image.size.height / image.size.width
        
        return CGSize(width: newWidth, height: newHeight)
    }
    
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    override init(frame: CGRect) {
        super.init(frame: frame)
        
        prepareUI()
    }
    
    // MARK: - 准备UI
    private func prepareUI() {
        // 添加子控件
        contentView.addSubview(scrollView)
        
        // 注意需要加到scrollView里面
        scrollView.addSubview(imageView)
        
        // 添加进来
        contentView.addSubview(indicator)
        
        // 添加约束
        // scrollView 填充父控件
        scrollView.translatesAutoresizingMaskIntoConstraints = false
        contentView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|-0-[sv]-0-|", options: NSLayoutFormatOptions(rawValue: 0), metrics: nil, views: ["sv": scrollView]))
        contentView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|-0-[sv]-0-|", options: NSLayoutFormatOptions(rawValue: 0), metrics: nil, views: ["sv": scrollView]))
        
        // 菊花
        indicator.translatesAutoresizingMaskIntoConstraints = false
        contentView.addConstraint(NSLayoutConstraint(item: indicator, attribute: NSLayoutAttribute.CenterX, relatedBy: NSLayoutRelation.Equal, toItem: contentView, attribute: NSLayoutAttribute.CenterX, multiplier: 1, constant: 0))
        contentView.addConstraint(NSLayoutConstraint(item: indicator, attribute: NSLayoutAttribute.CenterY, relatedBy: NSLayoutRelation.Equal, toItem: contentView, attribute: NSLayoutAttribute.CenterY, multiplier: 1, constant: 0))
    }
    
    // MARK: - 懒加载
    /// scrollView
    private lazy var scrollView = UIScrollView()
    
    /// imageView
    private lazy var imageView = UIImageView()
    
    /// 加载菊花
    private lazy var indicator = UIActivityIndicatorView(activityIndicatorStyle: UIActivityIndicatorViewStyle.WhiteLarge)
}
